home *** CD-ROM | disk | FTP | other *** search
/ The ZX Files 3 / ZX Files 3 (Disk 3 of 3).adf / 120 / 120
Text File  |  1978-01-22  |  28KB  |  665 lines

  1.  
  2.  
  3.  
  4. [Notes from transcriber: I left out the page numbers
  5.  
  6.  
  7. CURRAH uSPEECH programming manual
  8.  
  9. 1st Edition 1983
  10.  
  11. CONTENTS
  12.  
  13. Chapter 1               Setting up the CURRAH MicroSpeech
  14.  
  15. Chapter 2               Simple words and phrases
  16.  
  17. Chapter 3               The Allophone Set
  18.  
  19. Chapter 4               Intonation and "phrases libraries"
  20.  
  21. Chapter 5               The speech buffer - using CLEAR
  22.  
  23. Chapter 6               Using machine code with the unit
  24.  
  25. APPENDICES              I - Decimal & Hex codes for the allophones
  26.                         II - Tape Recorder / Hi-Fi Output
  27.                         III - LOAD, SAVE and BEEP
  28.                         IV - Using the unit with the Sinclair ZX
  29.                              Microdrive
  30.                         V - Commercial software on the MicroSpeech
  31.                         VII - Your television picture
  32.  
  33. 1. SETTING UP THE CURRAH MICROSPEECH
  34.  
  35. The CURRAH MicroSpeech is an allophone speech synthesiser, which means
  36. that it uses individual speech sounds strung together to make
  37. intelligible speech. This is different to some speech synthesiser
  38. available today which have a fixed vocabulary; unlike these systems
  39. the MicroSpeech has an unlimited vocabulary and can synthesise any
  40. word or sentence in the English language. The user merely has to
  41. become familiar with he speech sounds of English (which are different
  42. from letters) and the allophone symbols used to represent them.
  43.  
  44. To set up the unit, remove it from its packing tray if you have not
  45. already done so, UNPLUG THE SPECTRUM FROM ITS POWER SUPPLY, and plug
  46. the unit into the port on the back of the Spectrum, CURRAH logo
  47. uppermost. You will find that there are two short leads at the back of
  48. the MicroSpeech unit:
  49.  
  50.         - A UHF lead (this is the one with the Phono plug)
  51.         - A line lead (this has a 3.5mm jack plug on it)
  52.  
  53. Remove the Spectrum's TV lead from the "TV" socket on the back of the
  54. Spectrum and plug in the short UHF lead instead. Then take the
  55. Spectrum's TV lead and plug it into the Phono socket on the back of
  56. the MicroSpeech. This now allows speech to be "mixed" with the
  57. Spectrum's video signal so that it comes from the TV speaker.
  58.  
  59. Now take the line lead and plug it into the "MIC" socket on the back
  60. of the Spectrum (you cannot do any harm if you plug it into the "EAR"
  61. socket by mistake). This lead allows the sound generated by the
  62. Spectrum's own internal loudspeaker to come from the TV speaker -
  63. simply remove this lead when you wish to use a cassette recorder with
  64. your Spectrum.
  65.  
  66. Plug in the power lead to the Spectrum. The Spectrum will initialise
  67. and the message:
  68.  
  69.         "Speech System (c) CURRAH 1983"
  70.  
  71. will appear at the top of the screen, as well as the normal Sinclair
  72. Research Ltd. copyright message. If this does not happen, unplug the
  73. power, check that you have connected the unit up correctly, and try
  74. again.
  75.  
  76. Turn up the volume on your television (about half-way will do) and
  77. press ENTER. The unit will say "enter". If it does not, there are two
  78. simple checks you can do:
  79.  
  80.         -       Make sure you have pressed ENTER - the unit will
  81.                 remain silent until the first ENTER is pressed after a
  82.                 power up, a NEW, or after a "report" has been printed
  83.                 at the bottom of the screen.
  84.  
  85.         -       If you can hear the voice but it is very quiet or a
  86.                 little distorted, the UHF trimmer on the top right
  87.                 corner of the case may need adjusting. Using a small
  88.                 screwdriver, carefully turn the trimmer until you get
  89.                 the best quality speech with the least interference -
  90.                 keep pressing ENTER as you do this to hear the
  91.                 voice. Don't worry about turning the screw too far -
  92.                 it goes round and round without a stop - but you
  93.                 should find that an adjustment a fraction of a turn is
  94.                 all that you need.
  95.  
  96. Now try pressing any of the keys (remember to press ENTER first if
  97. you have just switched on). All BASIC keywords and printable
  98. characters are voiced, (with the exception of the "~" character) so
  99. when LET appears on the screen you will hear the word "let" - go on -
  100. try it! Note that all graphics characters are voiced as "graphic",
  101. whatever their shape.
  102.  
  103. All keyvoices "repeat" - if you try holding down ENTER for a few
  104. repeats, the unit will say something like"
  105.  
  106.         "E...E...E...E...Enter".
  107.  
  108. The old keyvoice is "chopped off" and a new one started each time the
  109. repeat occurs. If you type very fast the same sort of effect is
  110. obtained.
  111.  
  112. Try all of the keyvoices now. Apart from being useful in themselves,
  113. the keyvoices serve to illustrate what can be achieved by allophone
  114. speech synthesis.
  115.  
  116. When you are bored with this, go on to the next chapter. If at any
  117. point you get stuck, remember that all you have to do is unplug the
  118. power, wait a moment, and start again - the unit initialises
  119. automatically each time.
  120.  
  121. 2. SIMPLE WORDS & PHRASES
  122.  
  123. You may keep the keyvoices on as long as you want, but you may find
  124. them a nuisance after a while, so enter:
  125.  
  126.         LET keys=0
  127.  
  128. And you will find that the keyvoices have vanished. Try entering:
  129.  
  130.         LET keys=1
  131.  
  132. And they reappear again. What you have done is to use a "reserved
  133. variable" to tell the unit what to do -  the variable "keys" is
  134. "reserved" for the unit's use. You can put this in a program line, too
  135. - try entering this program:
  136.  
  137.         10 LET keys=0
  138.  
  139. After running this, the keyvoices are disabled again.
  140.  
  141. Once you have enabled or disabled the keyvoices, they remain either on
  142. or off until you enter a "LET keys=" command, either in a program line
  143. or entered directly as a command (note that the keyvoice status is
  144. preserved even after a NEW). There is another reserved variable, s$,
  145. (standing for "speech string") which is used for generating
  146. user-defined speech.
  147.  
  148. Try entering the following:
  149.  
  150.         LET s$="he(ll)(oo)"
  151.  
  152. You will hear the unit say "hello" (if you do not, type it in again,
  153. checking that you get all the brackets in).
  154.  
  155. Now try entering this program:
  156.  
  157.         10 LET s$="he(ll)(oo)": PAUSE 1
  158.  
  159. Because the way in which the MicroSpeech works, you MUST put a PAUSE
  160. statement after each "LET s$=" statement in a program to make sure
  161. that the unit detects each s$ as it occurs (PAUSE 1 will do).
  162.  
  163. If you RUN this program, you will again hear the word "hello". Every
  164. time you create a new s$, the contents of the string are examined by
  165. the allophone interpreter and, if the syntax is correct, the allophone
  166. symbols are converted into speech code and placed in a "buffer" (a
  167. sort of queue) near the top of memory. The code in the buffer is then
  168. automatically outputted to the speech chip without any further
  169. intervention from your BASIC program.
  170.  
  171. You BASIC program can go away and do other tasks once the speech has
  172. been stored, so you can fill the buffer up and leave it to get on with
  173. outputting speech whilst you type in some data, for instance, or add
  174. more speech to the buffer.
  175.  
  176. User-defined speech has higher priority than key voices, so that if a
  177. sentence is being spoken and you press a key, the keys will not voice,
  178. even if they are enabled, until the buffer has been emptied.
  179.  
  180. The unit has a self-diagnostic facility which reports on the status of
  181. the speech you tried output. RUN the above program again, and then
  182. enter:
  183.  
  184.         PRINT s$
  185.  
  186. The computer will report back with:
  187.  
  188.         *e(ll)(oo)
  189.  
  190. The asterisk obliterating the first character tells you that the
  191. allophone symbols contained in s$ were syntactically correct and that
  192. they were converted into speech code and loaded into the buffer for
  193. output. Now try changing the program to read:
  194.  
  195.         10 LET s$="he(ll)!(oo)": PAUSE 1
  196.  
  197. No speech will be generated if you RUN this as the exclamation is a
  198. "illegal" character. RUN the program, then type in:
  199.  
  200.         PRINT s$
  201.  
  202. And you will get the following report:
  203.  
  204.         ?e(ll)!?oo)
  205.  
  206. The query (?) obliterating the first character tells you that there
  207. was an error in the string, and the second query shows you where the
  208. error occured. In the case of an error occuring on the last character
  209. of the string, the second query obliterates it.
  210.  
  211. If you BREAK into a program whilst the voice is speaking the voice
  212. ceases at once - what is not so obvious is that any "report" given by
  213. the Spectrum other than "OK" will also have this effect: e.g., STOP
  214. statement, Out of DATA, RETURN without GOSUB, etc. This is to ensure
  215. that if there has been an error in a program which may have left you
  216. with a buffer full of data you will not have to wait for the buffer
  217. to empty itself - remember a buffer only 200 bytes long can hold over
  218. 30 seconds of speech.
  219.  
  220. You have seen four examples of the allophone symbols used already, and
  221. you will probably be wanting to try constructing you own words and
  222. phrases. When you feel that you are familiar with the use of the
  223. reserved variables, go on to the next chapter, where the whole
  224. allophone set will be introduced.
  225.  
  226. 3. THE ALLOPHONE SET
  227.  
  228. As you may have noticed, there are basically two sorts of allophone
  229. symbols, those that occur as single characters and those that have
  230. several characters enclosed by brackets. It is necessary to enclose
  231. some in brackets because "aa" for instance, is a different sound to
  232. "(aa)".
  233.  
  234. Here is a complete list of all the allophones. Try them to hear what
  235. they sound like by running this short program:
  236.  
  237.         10 INPUT a$: LET s$=a$: PAUSE 1
  238.         20 IF s$(TO 1)="?" THEN PRINT "You have made a mistake"
  239.         30 IF a$="stop" THEN STOP
  240.         40 GOTO 10
  241.  
  242. Now whenever you come across an allophone you would like to hear,
  243. simply enter it when the "L" prompt is given and the unit will say it
  244. for you. In the following table, the allophone symbols are shown on
  245. the left, with examples of the sounds on the right:
  246.  
  247. 1.  PHONETIC allophones:
  248.  
  249.         All single characters       All sound phonetic
  250.         a-z excepting x and q       e.g. like "a" in at, "b" in
  251.                                         tab, etc.
  252.  
  253. 2.  DOUBLE-VOWEL allophones:
  254.  
  255.         (aa) or (ay)                "ay" in hay
  256.         (ee)                        "ee" in see
  257.         (ii)                        "i" in hive
  258.         (oo) or (eau)               "o" in stove
  259.  
  260. 3.  STRONG PHONETIC allophones (used at the start of words or where
  261.     extra emphasis is required):
  262.  
  263.         (bb)                        "b" in bat
  264.         (dd)                        "d" in do
  265.         (gg)                        "g" in got
  266.         (ggg)                       "g" in big
  267.         (hh)                        "h" in hoe
  268.         (ll)                        "l" in let
  269.         (nn)                        "n" in no
  270.         (rr)                        "r" in run
  271.         (tt)                        "t" in to
  272.         (yy)                        "y" in yeah
  273.  
  274. 4.  COMPLEX ALLOPHONES:
  275.  
  276.         (ar)                        "ar" in arm
  277.         (aer)                       "air" in repair
  278.         (ch)                        "ch" in church
  279.         (ck)                        "ck" in clock
  280.         (ear)                       "ear" in clear
  281.         (eh)                        "ar" in wary
  282.         (er)                        "er" in leader
  283.         (err)                       "ur" in purr
  284.         (ng)                        "ng" in tongue
  285.         (or)                        "or" in sore
  286.         (ou)                        "oo" in root
  287.         (ouu)                       "oo" in food
  288.         (ow)                        "ow" in now
  289.         (oy)                        "oy" in boy
  290.         (sh)                        "sh" in ship
  291.         (th)                        "th" in thin
  292.         (dth)                       "th" in then
  293.         (uh)                        "oo" in took
  294.         (wh)                        "wh" in whig
  295.         (zh)                        "z" in azure
  296.  
  297. 5.  PAUSES
  298.         apostrophe                  very short pause - e.g. in can't
  299.         space                       pause between words
  300.         comma                       pause between phrases
  301.         full stop                   pause between sentences
  302.  
  303. X and Q are missing from the set as the speech sound they make may be
  304. made from combinations of other allophones - this is the key to
  305. allophone synthesis. For instance, the word "queen" may be made by
  306. "kw(ee)n" and the word "box" by "boks".
  307.  
  308. Certain allophones run together well, for example:
  309.  
  310.     LET s$="aaaaaaaa"
  311.  
  312. Comes out as a single "Aahhh" sound. Other allophones that exhibit
  313. this property are e, i, o, u, f, s, (eh), (th) and (uh).
  314.  
  315. To help you see how words are built up, here are some examples from
  316. the keyvoices:
  317.  
  318.     Keyvoice                        Voiced by using:
  319.  
  320.     AT                              a(tt)
  321.     '                               apostruf(ee)
  322.     =                               (ee) (ck)wulz
  323.     NEW                             ny(ouu)
  324.     SIN                             s(ii)n
  325.     CODE                            c(oo)d
  326.     ACS                             (ar)c'coz
  327.     STRING                          stri(ng)
  328.     CIRCLE                          s(er)cul
  329.     LLIST                           e(ll)'list
  330.     SAVE                            s(ay)'v
  331.     5                               f(ii)v
  332.     H                               (ay) (ch)
  333.     LOG                             lo(ggg)
  334.     THEN                            (dth)en
  335.     MERGE                           m(err)dj
  336.  
  337. You can see that a little care is needed to think in terms of how
  338. words are spoken rather than how they are written, but with a little
  339. practice you will be able to build up words very fast with few
  340. mistakes.
  341.  
  342. Try making up some words of your own now, and making short phrases
  343. using the various pauses to divide the words up. You should also try
  344. LISTing the BASIC demonstration program supplied with the unit to see
  345. how the various sentences are generate on that.
  346.  
  347. 4. INTONATION AND "PHRASE LIBRARIES"
  348.  
  349. Intonation is necessary in allophone speech to add characters to words
  350. or parts of words. Up to now you will have been entering speech
  351. strings in lower case letters. If you use UPPER case letters of any
  352. allophone, the intonation goes UP. Try this:
  353.  
  354.         LET s$="aaAAaaAAaaAAaaAAaa"
  355.  
  356. And you will hear a sound rather like someone yodelling. Note that the
  357. pitch of the allophones does not go up or down suddenly - it is
  358. "ramped" so that the transition is smooth. Try This:
  359.  
  360.         10 LET s$="sp(EE)k n(oo) (EE)vil": PAUSE 1
  361.  
  362. You will be able to hear the intonation. Note that the intonation will
  363. be most noticeable on vowels and "voiced" allophones, but try
  364. experimenting with it to see what sort of effects you can obtain.
  365.  
  366. The keyvoices have relatively little intonation added so that they
  367. sound "neutral" for the purpose of typing in programs.
  368.  
  369. In a bracketed allophone, it does not matter if you mix upper and
  370. lower case inside the bracket, as long as you realise that it is the
  371. LAST character inside the bracket which determines the intonation of
  372. the allophone. For example, "(oUu)" is not intoned, whilst "(ouU)" is
  373. intoned up.
  374.  
  375. When you are using the MicroSpeech unit to make sentences, think how
  376. much easier it would be if you could build up sentences from a
  377. "library" of words and phrases. Suppose you wanted to make the unit
  378. say "I'm sorry, but your answer was incorrect". Rather than put this
  379. in one long string, you might want to construct the sentence from a
  380. "library" of stock phrases, like this:
  381.  
  382.         10 LET a$="(II)'m sor(ee)"
  383.         20 LET b$=",but"
  384.         30 LET c$="y(OR) ans(er) woz"
  385.         40 LET d$="incurrect"
  386.         50 LET s$=a$: PAUSE 1: LET s$=b$: PAUSE 1: LET s$=c$: PAUSE 1:
  387.            LET s$=d$: PAUSE 1
  388.  
  389. Whilst this will work very well, there is another solution. You could
  390. set up the four strings as before but join them together
  391. ("concatenate") them into s$ by changing line 50 to read:
  392.  
  393.         50 LET s$=a$+b$+c$+d$: PAUSE 1
  394.  
  395. Whilst this is more compact than the first method, it is still rather
  396. wasteful of strings. If you have to build up sentences from a library
  397. of more than ten phrases, then you will probably find that setting up
  398. a string array and concatenating the elements into s$ will be a better
  399. solution. You will need to "slice" some elements before concatenation
  400. in order to suppress the trailing spaces:
  401.  
  402.         10 DIM a$(4,18)
  403.         20 LET a$(1)="(II)'m sor(ee)"
  404.         30 LET a$(2)=",but"
  405.         40 LET a$(3)="y(OR) ans(er) woz"
  406.         50 LET a$(4)="incurrect"
  407.         60 LET s$=a$(1)( TO 14)+a$(2)( TO 4)+a$(3)+a$(4)( TO 10)
  408.         70 PAUSE 1
  409.  
  410. 5. THE SPEECH BUFFER - USING CLEAR
  411.  
  412. It was explained earlier that speech data is stored near the top of
  413. memory until it is ready to be outputted.
  414.  
  415. The speech buffer is a "First In - First Out" buffer (a FIFO buffer)
  416. which is initialised when you turn on the Spectrum with the
  417. MicroSpeech attached. In order to do this, the unit moves the "top of
  418. BASIC RAM" pointer (RAMTOP) down by 256 bytes (so that on a 48K
  419. machine it will point to 65111) and the speech buffer is then
  420. established between the new RAMTOP and the user-defined graphics
  421. area. The buffer then fills from top (i.e. highest memory location)
  422. downwards as more speech is added to it. The top 6 bytes of the buffer
  423. (the "header") contain information on buffer and system status but the
  424. ones below it are free for speech data. You may make the buffer as
  425. large or as small as you want by use of the clear command.
  426.  
  427. For instance, on a 48K machine, CLEAR 65000 makes RAMTOP point to
  428. 65000, and the memory space free for the speech buffer will be
  429. increased by 111 bytes.
  430.  
  431. To safeguard against the buffer header being corrupted by a CLEAR
  432. command, the MicroSpeech unit monitors RAMTOP, and if a CLEAR is
  433. attempted into an illegal area (see below), the unit goes through its
  434. initialisation sequence again.
  435.  
  436. You BASIC program is not lost when this happens (unless it was so
  437. large that the new RAMTOP established by the unit truncated it), but
  438. you will find a new copyright message issued and RAMTOP once again
  439. established 256 bytes below the original RAMTOP.
  440.  
  441. If you try to add speech to the buffer and there is insufficient room
  442. for it to be fitted in, then the unit will ignore the speech string s$
  443. until there is sufficient room in the buffer. If you PRINT s$ under
  444. these conditions you will find it returned uncorrupted, i.e. without
  445. an asterisk or a query, to show that it has not been accepted into the
  446. buffer. If you find this occuring in a program, simply use CLEAR as
  447. described above to make the buffer a little larger, or alternatively
  448. use a PAUSE to allow the buffer to empty a little before attempting to
  449. add another string to it.
  450.  
  451. Since the keyvoices are outputted via a speech buffer, you can observe
  452. a similar effect if you enable the keyvoices when the buffer is very
  453. small. For instance, if you make the buffer only four bytes long, then
  454. any keyvoice longer than four allophones will not be voiced.
  455.  
  456. Summarising:
  457.  
  458. On a 18K machine, do not CLEAR greater than 32343
  459.  
  460. On a 48K machine, do not CLEAR greater than 65360
  461.  
  462. 6. USING MACHINE CODE WITH THE UNIT
  463.  
  464. This section is intended to set out guidelines for writing machine
  465. code programs for the unit. It must be stressed that the MicroSpeech
  466. was primarily designed to be used with BASIC for wider popular appeal,
  467. and as the operating software is necessarily complex only the
  468. experienced programmer should attempt writing machine code for the
  469. unit.
  470.  
  471. In the following examples, the 48K version memory address will be used
  472. - simply subtract 32768 to convert to the 16K machine. Decimal is
  473. used for all numbers unless otherwise stated.
  474.  
  475. At the top of the speech buffer is the six-byte "header" - information
  476. which controls the action of the buffer and the speech system. This
  477. comprises:
  478.  
  479.         ADDRESS (48K)   FUNCTION
  480.         65367           Flag byte
  481.         65366           Spare byte
  482.         65365           Hi byte of buffer pointer
  483.         65364           Lo byte of buffer pointer
  484.         65363           Spare
  485.         65362           Spare
  486.         65361           Next allophone to be voiced
  487.  
  488. The Buffer Pointer keeps a pointer to ONE BELOW the last item in the
  489. buffer which was voiced. It is incremented by one every time an
  490. allophone byte is outputted to the speech chip from the top of the
  491. buffer and the entire contents of the buffer is moved up by one ready
  492. for the next byte to leave. If this pointer points to 65361, as it
  493. does at startup, then the buffer is deemed empty and no allophone is
  494. issued.
  495.  
  496. The Spare bytes are initialised to zero (00h) at startup and serve as
  497. safe locations for you to store vital data in - you may want to
  498. experiment with a dual buffer, for instance, and switch between the
  499. two by swapping pointers.
  500.  
  501. The Flag Byte contains various flags for system use.
  502.  
  503. The function of each bit is as follows:
  504.  
  505.         BIT     FUNCTION
  506.         7       Copyright message flag - reset after issuing message
  507.         6       Spare
  508.         5       Spare
  509.         4       Used in keyboard scan - unlikely to be useful
  510.         3       Spare
  511.         2       Used in keyboard scan - unlikely to be useful
  512.         1       Key voice enabled (set at first)
  513.         0       Spare
  514.  
  515. None of the flag bits will cause a crash if you alter them although
  516. the copyright message will appear if you set bit 7.
  517.  
  518. The important thing NOT to corrupt is the buffer pointer - if you make
  519. this point below the current RAMTOP you will crash the system.
  520.  
  521. If you would like to input speech data directly into the buffer rather
  522. than go via the BASIC variable s$ you must first fill the buffer with
  523. the allophones you want.
  524.  
  525. Each allophone in the buffer is represented by a byte; six bits of
  526. each byte are devoted to the allophone code, one bit is for intonation,
  527. and bit 7 is always zero.
  528.  
  529.         BIT:        7      6      5 4 3 2 1 0
  530.         FUNCTION: zero intonation  allophone
  531.                        (1 for up)
  532.  
  533. The decimal and hexadecimal codes for the allophones are given in
  534. appendix I. As an example of machine code programming, let us suppose
  535. that you wanted to make the unit say "hello". First of all, you must
  536. work out the codes for "he(ll)(oo)" - they are 27, 7, 62 and 53.
  537.  
  538. Let us also suppose you wanted the "e" to be intoned up. Simply add 64
  539. to the basic code (7) to give 71. Now that you have your data, you
  540. have to load it into the buffer in the right order (top down) and then
  541. update the buffer pointer to point to ONE BELOW the last allophone you
  542. wish to be voiced. Here is a suggested program which would do this,
  543. written as an assembly language subroutine:
  544.  
  545. Start:  ld hl, Data
  546.         ld de, 65361
  547.         ld b, 4                 ; load count with 4
  548. Loop:   ld a, (hl)
  549.         ld (de), a              ; load allophone in buffer
  550.         inc hl
  551.         dec de
  552.         djnz Loop               ; loop to load four bytes
  553.         ex de, hl               ; point hl to 1 below the last byte in buffer
  554.  
  555.         ld (65364), hl          ; update pointer
  556.         ret
  557. Data:   Defb 27, 71, 62, 53     ; the four bytes data
  558.  
  559. APPENDIX I DECIMAL AND HEX CODES FOR THE ALLOPHONES
  560.  
  561. ALLOPHONE       DECIMAL HEX     ALLOPHONE       DECIMAL HEX
  562. a               24      18      (aa) or (ay)    20      14
  563. b               28      1c      (ee)            19      13
  564. c               8       08      (ii)            6       06
  565. d               21      15      (oo) or (eau)   53      35
  566. e               7       07      (bb)            63      3f
  567. f               40      28      (dd)            33      21
  568. g               36      24      (gg)            61      3d
  569. h               27      1b      (ggg)           34      22
  570. i               12      0c      (hh)            57      39
  571. j               10      0a      (ii)            62      3e
  572. k               42      2a      (nn)            56      38
  573. l               45      2d      (rr)            14      0e
  574. m               16      10      (tt)            13      0d
  575. n               11      0b      (yy)            25      19
  576. o               23      17      (ar)            59      3b
  577. p               9       9       (aer)           47      2f
  578. r               39      27      (ch)            50      32
  579. s               55      37      (ck)            41      29
  580. t               17      11      (ear)           60      3c
  581. u               15      0f      (eh)            26      1a
  582. v               35      23      (er)            51      33
  583. w               46      2e      (err)           52      34
  584. y               49      31      (ng)            44      2c
  585. z               43      2b      (or)            58      3a
  586. (space)         1       01      (ou)            22      16
  587. (space)         3       03      (ouu)           31      1f
  588. (space)         4       04      (ow)            32      20
  589.                                 (oy)            5       05
  590.                                 (sh)            37      25
  591.                                 (th)            29      1d
  592.                                 (dth)           18      12
  593.                                 (uh)            30      1e
  594.                                 (wh)            48      30
  595.                                 (zh)            33      21
  596.  
  597. Note that these only add up to 62 allophones. The two remaining ones
  598. are not implemented in the interpreter and are unlikely to be useful,
  599. although you can try them if you want - code 0 gives a 10ms pause,
  600. whilst code 54 (36h) gives an allophone practically identical to the
  601. (dth) allophone.
  602.  
  603. APPENDIX II TAPE RECORDER/HI-FI OUTPUT
  604.  
  605. The speech signal is present as a high impedance output on the line
  606. lead as well as a UHF output. To record some speech, plug the line
  607. lead into the "MIC" input in your tape recorder, set it to "RECORD"
  608. and any speech produced by the unit will be recorded on tape. To
  609. output speech to an external amplifier, connect the line lead to the
  610. "AUX" or "TAPE" input on your amplifier, via a suitable connecting
  611. lead.
  612.  
  613. APPENDIX III LOAD, SAVE AND BEEP
  614.  
  615. Before attempting to LOAD from a tape recorder, it is sensible to
  616. disable the keyvoices, as otherwise you will get a continuous "e"
  617. allophone outputted during the program load. This is due to the tape
  618. handling routines taking complete control of the Spectrum's CPU and
  619. preventing the MicroSpeech from updating its speech buffer. Upon
  620. completion of the LOAD, the "enter" keyvoice is completed normally.
  621.  
  622. If you leave the keyvoices on during SAVE, you will hear a keyvoice
  623. after the preliminary data block has been written to the tape recorder
  624. (the keyvoice you will hear is the one you press after the "press any
  625. key" prompt).
  626.  
  627. If you BEEP in the middle of an allophone, you will "draw out" the
  628. allophone and combine it with a musical tone, as the BEEP command
  629. prevents updates of the speech buffer for the duration of the tone. If
  630. you are very clever, you may be able to use this effect to make the
  631. MicroSpeech "sing".
  632.  
  633. APPENDIX IV USING THE UNIT WITH THE SINCLAIR ZX MICRODRIVE
  634.  
  635. The CURRAH MicroSpeech unit is fully compatible with the Sinclair ZX
  636. Microdrive and Interface I. Simply follow the setting up instructions
  637. supplied with Interface I, and plug the MicroSpeech unit into the port
  638. on the back of Interface I BEFORE plugging in the power.
  639.  
  640. Again, be sure to disable the keyvoices during all data transfer
  641. operations to prevent the "enter" keyvoice being drawn out.
  642.  
  643. APPENDIX V GAMES SOFTWARE ON THE MICROSPEECH
  644.  
  645. Most games programs will run on the CURRAH MicroSpeech, and even if
  646. the program does not use the speech facility you will find the game is
  647. enhanced as the Spectrum's sound will come from your television
  648. speaker. Leading software houses are currently writing games software
  649. which will utilise the speech output - watch out for these as they
  650. become available.
  651.  
  652. APPENDIX VI YOUR TELEVISION PICTURE
  653.  
  654. The CURRAH MicroSpeech "mixes" sound into the UHF output of the
  655. Spectrum modulator, and consequently on some makes of TV set you may
  656. find some "patterning" where large areas of strong colour are being
  657. displayed. This is not due to a fault in your unit, but is an
  658. inevitable consequence of mixing sound into the UHF output; the
  659. technically-minded amongst you might be interested to know that the
  660. patterning is due to "sidebands" generated during the mixing process
  661. interfering with the colour information being transmitted to your
  662. television.
  663.  
  664. Currah Computer Components Ltd.
  665. Graythrop Industrial Estate, Hartlepool TS25 2DF